The present invention relates generally to computer systems and more specifically to a system having the capability for re-creating source code from object code.
Computer languages which compile into a machine language which is native to a computer system are known to execute much faster than interpreted languages. In this context, the term interpreted languages means those languages which are translated from a source form into machine language at execution time while a compiled language is one which is translated to machine language during a previous, compilation step.
Compilers exist for many languages currently in popular use. However, there exist languages which currently cannot be fully compiled into machine language. A typical language of this class of languages is the programming language PROLOG, which is commonly in use in artificial intelligence research. Current PROLOG systems can be partially compiled, but certain desirable features of the language cannot be. Thus, a typical PROLOG compiler will compile a portion of the source code into machine language, and leave the remaining source code untouched to be translated to machine language by an interpreter at execution time.
Those portions of the language which have not heretofore been compilable relate generally to the self-modification commands within PROLOG. These include the CLAUSE, ASSERT, and the RETRACT commands. As is well known to PROLOG programmers, the CLAUSE command is used when one wishes to copy a portion of the original source code into a data structure for further manipulation by the program. This data structure may be modified, and then executed as a program block. The ASSERT and RETRACT commands, respectively, are used to add and delete clauses within the program at execution time. Those parts of the source code which are expected to used be by these commands must currently be retained in source form and executed by an interpreter at execution time. This greatly slows overall operation of the program.